package com.opcode.nebulamobil.base.fragments.dialogfragments;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;

import com.opcode.nebulamobil.R;
import com.opcode.nebulamobil.base.activities.FragmentActivityBase;
import com.opcode.nebulamobil.base.components.ButtonBase;
import com.opcode.nebulamobil.base.components.TextViewBase;
import com.opcode.nebulamobil.enums.TwoButtonDialogType;
import com.opcode.nebulamobil.information.ApplicationInfo;

/**
 * İki butona ve bir mesaj alanına sahip dialoglar için tasarlanmış olan sınıf dosyasıdır.
 * @author Okan ERDOĞAN
 *
 * 22 Eyl 2014
 */
public class TwoButtonDialogFragmentBase extends DialogFragmentBase{

	/*
	 * Fragment'a ait layout dosyasını tutar.
	 */
	private View vi;
	
	
	/*
	 * DialogFragment'ta kullanıcıya gösterilecek olan mesaj
	 */
	private String message;
	
	/*
	 * Parametre olarak alınan intent nesnesine ait nesne referansidir.
	 * Bu referans sayesinde onay işlemi yapıldıktan sonra hangi activitenin açılacağı belirlenir.
	 */
	private Intent intent;
	
	private int dialogType;
	
	private TwoButtonDialogType twoButtonDialogType;
	
	public TwoButtonDialogFragmentBase(TwoButtonDialogType twoButtonDialogType){
		this.twoButtonDialogType=twoButtonDialogType;
	}
	
	public TwoButtonDialogFragmentBase(String message,TwoButtonDialogType twoButtonDialogType){
		this.message=message;
		this.twoButtonDialogType=twoButtonDialogType;
	}
	
	public TwoButtonDialogFragmentBase(String message,Intent intent,TwoButtonDialogType twoButtonDialogType){
		this.message=message;
		this.intent=intent;
		this.twoButtonDialogType=twoButtonDialogType;
	}
	
	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {		
		
		if(twoButtonDialogType.equals(TwoButtonDialogType.CONNECTION_LOST_DIALOG)){
			this.vi = inflater.inflate(R.layout.connection_lost_dialog, container,false);
			this.createConnectionLostDialog();
		}else{
			this.vi = inflater.inflate(R.layout.two_button_dialog_fragment_layout, container,false);
			this.createDefaultDialog();
		}
		
		
		return this.vi;
	}
	
	
	private void createDefaultDialog(){
		
		TextViewBase dialog_message=(TextViewBase) this.vi.findViewById(R.id.dialog_message);
		if(this.message!=null){
			dialog_message.setText(this.message);
		}
		
		//Onay işlemi yapıldığı zaman bu bölüm işletilir.
		ButtonBase confirm_button=(ButtonBase) this.vi.findViewById(R.id.confirm_button);
		confirm_button.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {	
				
				if(intent!=null){
					startActivity(intent);
				}
			}
		});
		
		
		
		//Reddetme işlemi yapıldıktan sonra bu bölüm işletilir.
		ButtonBase decline_button=(ButtonBase) this.vi.findViewById(R.id.decline_button);
		decline_button.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {	
				dismiss();
			}
		});
	}
	
	
	private void createConnectionLostDialog(){
		ButtonBase tryAgainButton=(ButtonBase) this.vi.findViewById(R.id.try_again_button);
		TextViewBase tryAgainStatusInfo=(TextViewBase) this.vi.findViewById(R.id.try_again_status_info);
		ButtonBase updateServerInfoButton=(ButtonBase) this.vi.findViewById(R.id.update_server_info_button);
		
		if(this.message!=null){
			tryAgainStatusInfo.setText(this.message);
		}
		
		tryAgainButton.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {	
				dismiss();
				ApplicationInfo.getTryConnectionCommandListener().tryConnectionAgain();
				
			}
			
		});
		
		
		updateServerInfoButton.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {			
				dismiss();
				((FragmentActivityBase)getActivity()).showGeneralDialog(new SettingsDialogFragment(), "SETTING_DIALOG");
			}
			
		});	
	}
}
